home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Diamond Collection / The Diamond Collection (Software Vault)(Digital Impact).ISO / cdr47 / sb16snd.zip / XMS.C < prev    next >
C/C++ Source or Header  |  1995-02-18  |  3KB  |  118 lines

  1. /*           Copyright 1995 by Ethan Brodsky.  All rights reserved          */
  2.  
  3. /* ██ XMS.C ███████████████████████████████████████████████████████████████ */
  4.  
  5. #pragma option -w- // Prevent "Function should return a value" warning
  6.  
  7.   void xms_init(void);
  8.  
  9.   unsigned int xms_getversion(void);
  10.   unsigned int xms_getfreemem(void);
  11.  
  12.   int xms_allocate(int far *handle, unsigned int size);
  13.   int xms_reallocate(int handle, unsigned int newsize);
  14.   int xms_free(int far *handle);
  15.  
  16.   typedef struct
  17.     {
  18.       unsigned long length;
  19.       unsigned int  sourcehandle;
  20.       unsigned long sourceoffset;
  21.       unsigned int  desthandle;
  22.       unsigned long destoffset;
  23.     } MOVEPARAMS;
  24.  
  25.   int xms_move(MOVEPARAMS far *params);
  26.  
  27. /* ████████████████████████████████████████████████████████████████████████ */
  28.  
  29. #include <mem.h>
  30.  
  31.   void far *xms_driver = NULL; /* Pointer to XMS driver (Set by xms_init()) */
  32.  
  33.   void xms_init()
  34.     {
  35.       asm {
  36.         mov  ax, 0x4310
  37.         int  0x2F
  38.         mov  word ptr [xms_driver], bx
  39.         mov  word ptr [xms_driver+2], es
  40.       }
  41.     }
  42.  
  43. /* ──────────────────────────────────────────────────────────────────────── */
  44.  
  45.   unsigned int xms_getversion()
  46.     {
  47.       asm {
  48.         mov  ah, 0x00
  49.         call [xms_driver]
  50.       }
  51.     }
  52.  
  53. /* ──────────────────────────────────────────────────────────────────────── */
  54.  
  55.   unsigned int xms_getfreemem()
  56.     {
  57.       asm {
  58.         mov  ah, 0x08
  59.         call [xms_driver]
  60.         mov  ax, dx
  61.       }
  62.     }
  63.  
  64. /* ════════════════════════════════════════════════════════════════════════ */
  65.  
  66.   int xms_allocate(int far *handle, unsigned int size)
  67.     {
  68.       asm {
  69.         mov  ah, 0x09
  70.         mov  dx, size
  71.         call [xms_driver]
  72.         les  di, [handle]
  73.         mov  es:[di], dx
  74.       }
  75.     }
  76.  
  77. /* ──────────────────────────────────────────────────────────────────────── */
  78.  
  79.   int xms_reallocate(int handle, unsigned int newsize)
  80.     {
  81.       asm {
  82.         mov  ah, 0x0F
  83.         mov  bx, newsize
  84.         mov  dx, handle
  85.         call [xms_driver]
  86.       }
  87.     }
  88.  
  89. /* ──────────────────────────────────────────────────────────────────────── */
  90.  
  91.   int xms_free(int far *handle)
  92.     {
  93.       asm {
  94.         mov  ah, 0x0A
  95.         les  di, [handle]
  96.         mov  dx, es:[di]
  97.         call [xms_driver]
  98.         mov  word ptr es:[di], 0
  99.       }
  100.     }
  101.  
  102. /* ════════════════════════════════════════════════════════════════════════ */
  103.  
  104.   int xms_move(MOVEPARAMS far *params)
  105.     {
  106.       asm {
  107.         push ds
  108.         mov  ah, 0x0B
  109.         lds  si, [params]
  110.         call [xms_driver]
  111.         pop  ds
  112.       }
  113.     }
  114.  
  115. /*██████████████████████████████████████████████████████████████████████████*/
  116.  
  117. #pragma option -w  // Re-enable "function should return a value" warning
  118.